package com.hao.study.controller;

import com.github.pagehelper.PageInfo;
import com.hao.study.common.APIResponse;
import com.hao.study.common.ResponeCode;
import com.hao.study.entity.Thing;
import com.hao.study.permission.Access;
import com.hao.study.permission.AccessLevel;
import com.hao.study.service.ThingService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
/**
 * 事物控制器，负责处理与事物相关的HTTP请求。
 */
@Api(tags={"岗位管理接口"})
@RestController
@RequestMapping("/thing")
public class ThingController {
    // 自动注入事物服务，用于执行事物相关的业务操作
    @Autowired
    ThingService thingsService;
    // 读取配置文件中的上传路径，用于保存上传的文件
    @Value("${File.uploadPath}")
    private String uploadPath;

    /**
     * 分页查询事物列表。
     *
     * @param pageNum 当前页码
     * @param pageSize 每页的数量
     * @param keyword 搜索关键字
     * @param sort 排序字段
     * @param classification 分类标识
     * @param tag 标签
     * @return 包含查询结果的API响应
     */
    @GetMapping("list")
    public APIResponse list(@RequestParam(defaultValue = "1") Integer pageNum,
                            @RequestParam(defaultValue = "10") Integer pageSize,
                            String keyword,String sort,String classification,String tag){
        PageInfo<Thing> thingPageInfo = thingsService.getThingList(pageNum,pageSize,keyword,sort,classification,tag);

        return new APIResponse(ResponeCode.SUCCESS,"查询成功",thingPageInfo);
    }

    /**
     * 根据ID查询单个事物的详细信息。
     *
     * @param id 事物ID
     * @return 包含查询结果的API响应
     */
    @GetMapping("detail")
    public APIResponse detail(String id){
        Thing thing=thingsService.getThingById(id);
        return new APIResponse<>(ResponeCode.SUCCESS,"查询成功",thing);
    }

    /**
     * 创建新事物。
     *
     * @param thing 待创建的事物对象
     * @return 创建成功的API响应
     * @throws IOException 如果文件处理失败抛出此异常
     */
    @Access(level = AccessLevel.ADMIN)
    @PostMapping("create")
    @Transactional
    public APIResponse create(Thing thing) throws IOException {
//        String url = saveThing(thing);
//        if(!StringUtils.isEmpty(url)) {
//            thing.cover = url;
//        }
        thingsService.createThing(thing);
        return new APIResponse<>(ResponeCode.SUCCESS,"创建成功");
    }

    /**
     * 批量删除事物。
     *
     * @param ids 待删除的事物ID，多个ID以逗号分隔
     * @return 删除成功的API响应
     */
    @Access(level = AccessLevel.ADMIN)
    @PostMapping("delete")
    public APIResponse delete(String ids){
        System.out.println("ids====="+ids);
        //批量删除
        String[] arr=ids.split(",");
        for (String id :
                arr) {
            thingsService.deleteThing(id);
        }
        return new APIResponse(ResponeCode.SUCCESS,"删除成功");
    }

    /**
     * 更新已有事物的信息。
     *
     * @param thing 待更新的事物对象
     * @return 更新成功的API响应
     * @throws IOException 如果文件处理失败抛出此异常
     */
    @Access(level = AccessLevel.ADMIN)
    @PostMapping("update")
    @Transactional
    public APIResponse update(Thing thing) throws IOException {
        System.out.println(thing);
//        String url = saveThing(thing);
//        if(!StringUtils.isEmpty(url)) {
//            thing.cover = url;
//        }

        thingsService.updateThing(thing);
        return new APIResponse(ResponeCode.SUCCESS, "更新成功");
    }
//    private String saveThing(Thing thing) throws IOException {
//        MultipartFile file=thing.getImageFile();
//        String newFileName = null;
//        if (file!=null&&!file.isEmpty()){
//            //保存图片
//            String oldFileName = file.getOriginalFilename();
//            String randomStr = UUID.randomUUID().toString();
//            newFileName = randomStr +oldFileName.substring(oldFileName.lastIndexOf("."));
//            String filePath = uploadPath + File.separator+"image"+File.separator+newFileName;
//            File destFile =new File(filePath);
//            if (!destFile.getParentFile().exists()){
//                destFile.getParentFile().mkdirs();
//            }
//            file.transferTo(destFile);
//        }
//        if (!StringUtils.isEmpty(newFileName)){
//            thing.cover=newFileName;
//        }
//        return newFileName;
//    }
    /**
     * 根据用户ID查询用户的事物列表。
     *
     * @param userId 用户ID
     * @return 包含查询结果的API响应
     */
    @GetMapping( "/listUserThingApi")
    public APIResponse listUserThingApi(String userId){
        List<Thing> list =  thingsService.getUserThing(userId);

        return new APIResponse(ResponeCode.SUCCESS, "查询成功", list);
    }
}
